<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
    <title>Pony 教程  | 字面量（Literals）</title>
    <meta name="HandheldFriendly" content="True">
    <meta name="MobileOptimized" content="320">

    <meta name="viewport" content="width=device-width,minimum-scale=1">
    <meta name="generator" content="Hugo 0.69.0-DEV" />
    
    
      <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
    

    <style>
      @font-face {
        font-family: 'Icon';
        src: url('/pony-tutorial/dist/fonts/icon.eot?52m981');
        src: url('/pony-tutorial/dist/fonts/icon.eot?#iefix52m981')
               format('embedded-opentype'),
             url('/pony-tutorial/dist/fonts/icon.woff?52m981')
               format('woff'),
             url('/pony-tutorial/dist/fonts/icon.ttf?52m981')
               format('truetype'),
             url('/pony-tutorial/dist/fonts/icon.svg?52m981#icon')
               format('svg');
        font-weight: normal;
        font-style: normal;
      }
    </style>

    <link href="/pony-tutorial/dist/css/app.css" rel="stylesheet">
    <link href="/pony-tutorial/dist/css/highlight.css" rel="stylesheet">
    <link href="/pony-tutorial/dist/css/icon.css" rel="stylesheet">
    <link href="/pony-tutorial/dist/css/pony.css" rel="stylesheet">

    

    
      
    

    

    <meta property="og:title" content="字面量（Literals）" />
<meta property="og:description" content="What do we want?
Values!
Where do we want them?
In our Pony programs!
Say no more
每一种编程语言都会有字面量对数据的类型进行描述，Pony也不例外。
Pony表达式中常用的字面量有：布尔、数值、字符、字符串、数组。
Bool型 布尔类型有两个可选值：true 和 false。
数字型 数字型字面量包括：有符号整数、无符号整数和浮点数。
在大多数情况下，Pony可以从上下文中推导出具体的数据类型（这包括，分配给字段或局部变量或作为方法/行为调用的参数）。
可以使用以下一种数字类型的构造函数来帮助编译器确定字面量的具体类型：
 U8, U16, U32, U64, U128, USize, ULong I8, I16, I32, I64, I128, ISize, ILong F32, F64  let my_explicit_unsigned: U32 = 42_000 let my_constructor_unsigned = U8(1) let my_constructor_float = F64(1.234) 整数可以以十进制，十六进制或二进制形式给出：
let my_decimal_int: I32 = 1024 //十进制 let my_hexadecimal_int: I32 = 0x400	//十六进制 let my_binary_int: I32 = 0b10000000000	//二进制 浮点文字以标准浮点或科学计数法表示：" />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://damon-kwok.github.io/pony-tutorial/expressions/literals.html" />
<meta property="article:modified_time" content="2020-04-17T18:02:44+08:00" />
<meta itemprop="name" content="字面量（Literals）">
<meta itemprop="description" content="What do we want?
Values!
Where do we want them?
In our Pony programs!
Say no more
每一种编程语言都会有字面量对数据的类型进行描述，Pony也不例外。
Pony表达式中常用的字面量有：布尔、数值、字符、字符串、数组。
Bool型 布尔类型有两个可选值：true 和 false。
数字型 数字型字面量包括：有符号整数、无符号整数和浮点数。
在大多数情况下，Pony可以从上下文中推导出具体的数据类型（这包括，分配给字段或局部变量或作为方法/行为调用的参数）。
可以使用以下一种数字类型的构造函数来帮助编译器确定字面量的具体类型：
 U8, U16, U32, U64, U128, USize, ULong I8, I16, I32, I64, I128, ISize, ILong F32, F64  let my_explicit_unsigned: U32 = 42_000 let my_constructor_unsigned = U8(1) let my_constructor_float = F64(1.234) 整数可以以十进制，十六进制或二进制形式给出：
let my_decimal_int: I32 = 1024 //十进制 let my_hexadecimal_int: I32 = 0x400	//十六进制 let my_binary_int: I32 = 0b10000000000	//二进制 浮点文字以标准浮点或科学计数法表示：">
<meta itemprop="dateModified" content="2020-04-17T18:02:44&#43;08:00" />
<meta itemprop="wordCount" content="494">



<meta itemprop="keywords" content="" /><meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="字面量（Literals）"/>
<meta name="twitter:description" content="What do we want?
Values!
Where do we want them?
In our Pony programs!
Say no more
每一种编程语言都会有字面量对数据的类型进行描述，Pony也不例外。
Pony表达式中常用的字面量有：布尔、数值、字符、字符串、数组。
Bool型 布尔类型有两个可选值：true 和 false。
数字型 数字型字面量包括：有符号整数、无符号整数和浮点数。
在大多数情况下，Pony可以从上下文中推导出具体的数据类型（这包括，分配给字段或局部变量或作为方法/行为调用的参数）。
可以使用以下一种数字类型的构造函数来帮助编译器确定字面量的具体类型：
 U8, U16, U32, U64, U128, USize, ULong I8, I16, I32, I64, I128, ISize, ILong F32, F64  let my_explicit_unsigned: U32 = 42_000 let my_constructor_unsigned = U8(1) let my_constructor_float = F64(1.234) 整数可以以十进制，十六进制或二进制形式给出：
let my_decimal_int: I32 = 1024 //十进制 let my_hexadecimal_int: I32 = 0x400	//十六进制 let my_binary_int: I32 = 0b10000000000	//二进制 浮点文字以标准浮点或科学计数法表示："/>

  </head>

  <body class="ma0 avenir bg-near-white">

    

  <header>
    <div class="bg-pony-brown">
      <nav class="pv3 ph3 ph4-ns" role="navigation">
  <div class="flex-l justify-between items-center center">
    <a href="https://damon-kwok.github.io/pony-tutorial/" class="f3 fw2 hover-white no-underline white-90 dib">
      Pony 教程
    </a>
    <div class="flex-l items-center">
      
      
<div hidden>
  <span id="new-window-0">Opens in a new window</span>
  <span id="new-window-1">Opens an external site</span>
  <span id="new-window-2">Opens an external site in a new window</span>
</div>



<a href="https://www.twitter.com/ponylang" target="_blank" class="link-transition twitter link dib z-999 pt3 pt0-l mr1" title="Twitter link" rel="noopener" aria-describedby="new-window-0">
  <svg height="32px"  style="enable-background:new 0 0 67 67;" version="1.1" viewBox="0 0 67 67" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M37.167,22.283c-2.619,0.953-4.274,3.411-4.086,6.101  l0.063,1.038l-1.048-0.127c-3.813-0.487-7.145-2.139-9.974-4.915l-1.383-1.377l-0.356,1.017c-0.754,2.267-0.272,4.661,1.299,6.271  c0.838,0.89,0.649,1.017-0.796,0.487c-0.503-0.169-0.943-0.296-0.985-0.233c-0.146,0.149,0.356,2.076,0.754,2.839  c0.545,1.06,1.655,2.097,2.871,2.712l1.027,0.487l-1.215,0.021c-1.173,0-1.215,0.021-1.089,0.467  c0.419,1.377,2.074,2.839,3.918,3.475l1.299,0.444l-1.131,0.678c-1.676,0.976-3.646,1.526-5.616,1.568  C19.775,43.256,19,43.341,19,43.405c0,0.211,2.557,1.397,4.044,1.864c4.463,1.377,9.765,0.783,13.746-1.568  c2.829-1.673,5.657-5,6.978-8.221c0.713-1.716,1.425-4.851,1.425-6.354c0-0.975,0.063-1.102,1.236-2.267  c0.692-0.678,1.341-1.419,1.467-1.631c0.21-0.403,0.188-0.403-0.88-0.043c-1.781,0.636-2.033,0.551-1.152-0.402  c0.649-0.678,1.425-1.907,1.425-2.267c0-0.063-0.314,0.042-0.671,0.233c-0.377,0.212-1.215,0.53-1.844,0.72l-1.131,0.361l-1.027-0.7  c-0.566-0.381-1.361-0.805-1.781-0.932C39.766,21.902,38.131,21.944,37.167,22.283z M33,64C16.432,64,3,50.569,3,34S16.432,4,33,4  s30,13.431,30,30S49.568,64,33,64z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/></svg>

<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000" width="8px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/>
</svg>
</span></a>





<a href="https://github.com/damon-kwok/pony-tutorial-zh_CN" target="_blank" class="link-transition github link dib z-999 pt3 pt0-l mr1" title="Github link" rel="noopener" aria-describedby="new-window-0">
  <svg  height="32px"  style="enable-background:new 0 0 512 512;" version="1.1" viewBox="0 0 512 512" width="32px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
  <path d="M256,32C132.3,32,32,134.8,32,261.7c0,101.5,64.2,187.5,153.2,217.9c11.2,2.1,15.3-5,15.3-11.1   c0-5.5-0.2-19.9-0.3-39.1c-62.3,13.9-75.5-30.8-75.5-30.8c-10.2-26.5-24.9-33.6-24.9-33.6c-20.3-14.3,1.5-14,1.5-14   c22.5,1.6,34.3,23.7,34.3,23.7c20,35.1,52.4,25,65.2,19.1c2-14.8,7.8-25,14.2-30.7c-49.7-5.8-102-25.5-102-113.5   c0-25.1,8.7-45.6,23-61.6c-2.3-5.8-10-29.2,2.2-60.8c0,0,18.8-6.2,61.6,23.5c17.9-5.1,37-7.6,56.1-7.7c19,0.1,38.2,2.6,56.1,7.7   c42.8-29.7,61.5-23.5,61.5-23.5c12.2,31.6,4.5,55,2.2,60.8c14.3,16.1,23,36.6,23,61.6c0,88.2-52.4,107.6-102.3,113.3   c8,7.1,15.2,21.1,15.2,42.5c0,30.7-0.3,55.5-0.3,63c0,6.1,4,13.3,15.4,11C415.9,449.1,480,363.1,480,261.7   C480,134.8,379.7,32,256,32z"/>
</svg>

<span class="new-window"><svg  height="8px"  style="enable-background:new 0 0 1000 1000;" version="1.1" viewBox="0 0 1000 1000" width="8px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >
<path d="M598 128h298v298h-86v-152l-418 418-60-60 418-418h-152v-86zM810 810v-298h86v298c0 46-40 86-86 86h-596c-48 0-86-40-86-86v-596c0-46 38-86 86-86h298v86h-298v596h596z" style="fill-rule:evenodd;clip-rule:evenodd;fill:;"/>
</svg>
</span></a>



    </div>
  </div>
</nav>

    </div>
  </header>


    <main role="main">
      
  <article class="w-100 ph4 pb5 pb6-ns pt1 pt3-ns">
    <div class="order-0 w-20 dn db-l doc-menu" id="doc-menu">
      <div class="order-0 w-20 mt2 mb2" id="search-wrapper">
  <input id="search-box" type="search" placeholder="search" />
</div>

      
<nav role="navigation">
  <ul class="list pa0 nl2">
    
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".getting-started">入门（Getting Started）</a>
        <ul class="getting-started desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started/what-you-need.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              准备工作（What You Need）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started/hello-world.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Hello World
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/getting-started/how-it-works.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              庖丁解牛
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".types">类型系统（Types）</a>
        <ul class="types desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/types.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/at-a-glance.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类型系统概览
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/classes.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类（Classes）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/primitives.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              基元类（Primitives）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/actors.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              并发单元（Actors）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/traits-and-interfaces.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              特征和接口（Traits and Interfaces）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/structs.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              结构体（Structs）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/type-aliases.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类型别名（Type Aliases）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/types/type-expressions.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              类型表达式（Type Expressions）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2  primary-color" data-target=".expressions">表达式（Expressions）</a>
        <ul class="expressions desktopmenu animated fadeIn list pl0 bg-light-gray db">
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/literals.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 primary-color ">
              字面量（Literals）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/variables.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              变量（Variables）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/ops.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              运算符（Operators）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/arithmetic.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              算术运算符（Arithmetic）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/control-structures.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              流程控制（Control Structures）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/methods.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              方法（Methods）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/errors.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              异常处理（Errors）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/equality.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              比较（Equality in Pony）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/sugar.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              语法糖（Sugar）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/object-literals.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              匿名对象（Object Literals）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/expressions/partial-application.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              柯里化（Partial Application）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".reference-capabilities">引用权能（Reference Capabilities）</a>
        <ul class="reference-capabilities desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/reference-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              引用权能（Reference Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/guarantees.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能约束（Reference Capability Guarantees）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/consume-and-destructive-read.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能转让和破坏性读取（Consume and Destructive Read）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/recovering-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能借用（Recovering Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/aliasing.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              别名引用（Aliasing）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/passing-and-sharing.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Passing and Sharing References
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/capability-subtyping.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能包含关系（Capability Subtyping）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/combining-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能合并（Combining Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/arrow-types.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              箭头的用法（Arrow Types aka Viewpoints）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/reference-capabilities/capability-matrix.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              权能矩阵（Reference Capability Matrix）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".object-capabilities">对象权能模型（Object Capabilities）</a>
        <ul class="object-capabilities desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/object-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/object-capabilities/object-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              对象权能模型（Object Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/object-capabilities/trust-boundary.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              边界信任（Trust Boundary）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".pattern-matching">模式匹配（Pattern Matching）</a>
        <ul class="pattern-matching desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/pattern-matching.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/pattern-matching/match.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              匹配表达式（Match Expressions）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/pattern-matching/as.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              as操作符（As Operator）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".generics">泛型（Generics）</a>
        <ul class="generics desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/generics.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/generics/generics-and-reference-capabilities.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              泛型和引用权能（Generics and Reference Capabilities）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/generics/generic-constraints.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              泛型约束（Constraints）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".packages">包（Packages）</a>
        <ul class="packages desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages/package-system.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              包机制（Package System）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages/use-statement.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              包的使用方式（Use Statement）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/packages/standard-library.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              标准库（Standard Library）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".testing">测试（Testing）</a>
        <ul class="testing desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/testing.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/testing/ponytest.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Testing with Ponytest
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".c-ffi">C FFI</a>
        <ul class="c-ffi desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/calling-c.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Calling C from Pony
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/linking-c.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Linking to C Libraries
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/c-abi.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              C ABI
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/c-ffi/callbacks.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Callbacks
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".gotchas">陷阱（Gotchas）</a>
        <ul class="gotchas desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/divide-by-zero.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Divide by Zero
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/garbage-collection.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Garbage Collection
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/scheduling.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Scheduling
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/side-effect-ordering-in-function-call-expressions.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Function Call Side Effects
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/gotchas/recursion.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Recursion
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".where-next">下一步？（Where Next?）</a>
        <ul class="where-next desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/where-next.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
        </ul>
      </li>
      
      <li class="f5 w-100 hover-bg-light-gray hover-accent-color-light fw8">
        <a href="javascript:void(0)" class="js-toggle dib w-100 link mid-gray hover-accent-color-light pl2 pr2 pv2 " data-target=".appendices">附录（Appendices）</a>
        <ul class="appendices desktopmenu animated fadeIn list pl0 bg-light-gray dn">
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              概述（Overview）
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/ponypath.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              PONYPATH
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/lexicon.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Lexicon
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/symbol-lookup-cheatsheet.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Symbol Lookup Cheatsheet
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/keywords.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Keywords
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/examples.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Examples
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/whitespace.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Whitespace
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/compiler-args.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Compiler Arguments
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/memory-allocation.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Memory Allocation at Runtime
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/garbage-collection.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Garbage Collection with Pony-ORCA
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/platform-dependent-code.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Platform-dependent code
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/error-messages.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              A Short Guide to Pony Error Messages
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/annotations.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Program Annotations
            </a>
          </li>
          <li class="f6 fw4">
            <a href="/pony-tutorial/appendices/serialisation.html" class="db link hover-bg-gray hover-white pl3 pr2 pv2 black ">
              Serialisation
            </a>
          </li>
        </ul>
      </li>
  </ul>
</nav>

    </div>
    <div class="flex-l" id="the-body"><div class="order-2 w-100 w-20-l ph5-m ph0-l mb4 sticky dn db-l" id="context-menu"><div class="bg-light-gray pa3 nested-list-reset nested-copy-line-height nested-links">
    <p class="f5 b mb3">What's in this document</p>
      <nav id="TableOfContents">
  <ul>
    <li><a href="#bool型">Bool型</a></li>
    <li><a href="#数字型">数字型</a></li>
    <li><a href="#字符型">字符型</a>
      <ul>
        <li><a href="#多重字符multibyte-character-literals">多重字符（Multibyte Character literals）</a></li>
      </ul>
    </li>
    <li><a href="#字符串">字符串</a>
      <ul>
        <li><a href="#字符串和编码">字符串和编码</a></li>
        <li><a href="#多行字符串triple-quoted-strings">多行字符串（Triple quoted Strings）</a></li>
        <li><a href="#字符串示例">字符串示例：</a></li>
      </ul>
    </li>
    <li><a href="#数组array-literals">数组（Array Literals）</a>
      <ul>
        <li><a href="#类型接口type-inference">类型接口（Type inference）</a></li>
        <li><a href="#as表达式">as表达式</a></li>
        <li><a href="#数组和引用">数组和引用</a></li>
      </ul>
    </li>
  </ul>
</nav>
  </div>




</div><div class="order-1 w-60-l mw9 ph0 ph5-ns mid-gray nested-copy-line-height no-underline nested-links nested-img nested-copy-seperator nested-blockquote mt0-ns" style="flex-grow:1;">
        <div class="order-0 mt4 w-100 center mw7" style="clear: both;">
          <a id="doc-menu-toggle" class="icon icon-menu" href="javascript:void(0)" onClick="hideShowDM()"></a><a id="context-menu-toggle" class="icon icon-menu" href="javascript:void(0)" onClick="hideShowCM()"></a></div>

        <div class="documentation-copy center mw7" id="content">
          <header class="mt4 w-100">
            <p class="f6 b helvetica tracked">
                
              表达式（EXPRESSIONS）
            </p>
            <h1 class="f1 athelas mb1">字面量（Literals）</h1>
          </header>

          <main class="nested-copy-line-height lh-copy serif f4 nested-links nested-img mid-gray pr4-l"><p><em><strong>What do we want?</strong></em></p>
<p>Values!</p>
<p><em><strong>Where do we want them?</strong></em></p>
<p>In our Pony programs!</p>
<p><strong>Say no more</strong></p>
<!-- raw HTML omitted -->
<p>每一种编程语言都会有字面量对数据的类型进行描述，Pony也不例外。</p>
<!-- raw HTML omitted -->
<p>Pony表达式中常用的字面量有：布尔、数值、字符、字符串、数组。</p>
<!-- raw HTML omitted -->
<h2 id="bool型">Bool型</h2>
<!-- raw HTML omitted -->
<p>布尔类型有两个可选值：<code>true</code> 和 <code>false</code>。</p>
<!-- raw HTML omitted -->
<h2 id="数字型">数字型</h2>
<!-- raw HTML omitted -->
<p>数字型字面量包括：有符号整数、无符号整数和浮点数。</p>
<!-- raw HTML omitted -->
<p>在大多数情况下，Pony可以从上下文中推导出具体的数据类型（这包括，分配给字段或局部变量或作为方法/行为调用的参数）。</p>
<!-- raw HTML omitted -->
<p>可以使用以下一种数字类型的构造函数来帮助编译器确定字面量的具体类型：</p>
<ul>
<li>U8, U16, U32, U64, U128, USize, ULong</li>
<li>I8, I16, I32, I64, I128, ISize, ILong</li>
<li>F32, F64</li>
</ul>
<pre><code class="language-pony" data-lang="pony">let my_explicit_unsigned: U32 = 42_000
let my_constructor_unsigned = U8(1)
let my_constructor_float = F64(1.234)
</code></pre><!-- raw HTML omitted -->
<p>整数可以以十进制，十六进制或二进制形式给出：</p>
<pre><code class="language-pony" data-lang="pony">let my_decimal_int: I32 = 1024 			//十进制
let my_hexadecimal_int: I32 = 0x400		//十六进制
let my_binary_int: I32 = 0b10000000000	//二进制
</code></pre><!-- raw HTML omitted -->
<p>浮点文字以标准浮点或科学计数法表示：</p>
<pre><code class="language-pony" data-lang="pony">let my_double_precision_float: F64 = 0.009999999776482582092285156250 //标准浮点数
let my_scientific_float: F32 = 42.12e-4 //科学计数法
</code></pre><!-- raw HTML omitted -->
<h2 id="字符型">字符型</h2>
<!-- raw HTML omitted -->
<p>字符使用单引号<code>'</code>包裹。</p>
<!-- raw HTML omitted -->
<p>字符和字符串有很大区别，它表示的是一个有符号数字。一个字节即是一个<code>U8</code>。但是它们可以被转换为任意整数类型：</p>
<pre><code class="language-pony" data-lang="pony">let big_a: U8 = 'A'                 // 65
let hex_escaped_big_a: U8 = '\x41'  // 65
let newline: U32 = '\n'             // 10
</code></pre><!-- raw HTML omitted -->
<p>下面是Pony支持的字符转义：</p>
<ul>
<li><code>\x4F</code> hex escape sequence with 2 hex digits (up to 0xFF)</li>
<li><code>\a</code>, <code>\b</code>, <code>\e</code>, <code>\f</code>, <code>\n</code>, <code>\r</code>, <code>\t</code>, <code>\v</code>, <code>\\</code>, <code>\0</code>, <code>\'</code></li>
</ul>
<!-- raw HTML omitted -->
<h3 id="多重字符multibyte-character-literals">多重字符（Multibyte Character literals）</h3>
<!-- raw HTML omitted -->
<p>Pony的字符字面量可以包含多个字符。生成的整数值是逐字节构造的，每个字符代表生成的整数中的单个字节，最后一个字符是最低有效字节：</p>
<pre><code class="language-pony" data-lang="pony">let multiByte: U64 = 'ABCD' // 0x41424344
</code></pre><!-- raw HTML omitted -->
<h2 id="字符串">字符串</h2>
<!-- raw HTML omitted -->
<p>字符串使用<code>&quot;</code>或<code>&quot;&quot;&quot;</code>包裹。可以包含任意类型的字节或转义字符：</p>
<ul>
<li><code>\u00FE</code> unicode escape sequence with 4 hex digits encoding one code point</li>
<li><code>\u10FFFE</code> unicode escape sequence with 6 hex digits encoding one code point</li>
<li><code>\x4F</code> hex escape sequence for unicode letters with 2 hex digits (up to 0xFF)</li>
<li><code>\a</code>, <code>\b</code>, <code>\e</code>, <code>\f</code>, <code>\n</code>, <code>\r</code>, <code>\t</code>, <code>\v</code>, <code>\\</code>, <code>\0</code>, <code>\&quot;</code></li>
</ul>
<!-- raw HTML omitted -->
<p>每个转义序列编码一个完整字符，而不是字节。</p>
<pre><code class="language-pony" data-lang="pony">use &quot;format&quot;

actor Main
  new create(env: Env) =&gt;

    let pony = &quot;🐎&quot;
    let pony_hex_escaped = &quot;p\xF6n\xFF&quot;
    let pony_unicode_escape = &quot;\U01F40E&quot;

    env.out.print(pony + &quot; &quot; + pony_hex_escaped + &quot; &quot; + pony_unicode_escape)
    for b in pony.values() do
      env.out.print(Format.int[U8](b, FormatHex))
    end

</code></pre><!-- raw HTML omitted -->
<p>Pony字符串支持多行定义：</p>
<pre><code class="language-pony" data-lang="pony">
let stacked_ponies = &quot;
🐎
🐎
🐎
&quot;
</code></pre><!-- raw HTML omitted -->
<h3 id="字符串和编码">字符串和编码</h3>
<!-- raw HTML omitted -->
<p>字符串的文字如果从其源代码文件中定义。那么，它们的实际值取决于其源码文件的编码格式。</p>
<!-- raw HTML omitted -->
<p>请看下面的示例：</p>
<pre><code class="language-pony" data-lang="pony">let u_umlaut = &quot;ü&quot;
</code></pre><!-- raw HTML omitted -->
<p>如果文件编码格式是 <em>UTF-8</em> 那么<code>u_umlaut</code> 的值是: <code>\xc3\xbc</code>。如果文件编码格式是<em>ISO-8559-1</em> (Latin-1) 它的值就是 <code>\xfc</code>。</p>
<!-- raw HTML omitted -->
<h3 id="多行字符串triple-quoted-strings">多行字符串（Triple quoted Strings）</h3>
<!-- raw HTML omitted -->
<p>要在字符串中嵌入多行文本，请将字符串使用三引号引起来的。</p>
<pre><code class="language-pony" data-lang="pony">let triple_quoted_string_docs =
  &quot;&quot;&quot;
  Triple quoted strings are the way to go for long multiline text.
  They are extensively used as docstrings which are turned into api documentation.

  They get some special treatment, in order to keep Pony code readable:

  * The string literal starts on the line after the opening triple quote.
  * Common indentation is removed from the string literal
    so it can be conveniently aligned with the enclosing indentation
    e.g. each line of this literal will get its first two whitespaces removed
  * Whitespace after the opening and before the closing triple quote will be
    removed as well. The first line will be completely removed if it only
    contains whitespace. e.g. this strings first character is `T` not `\n`.
  &quot;&quot;&quot;
</code></pre><!-- raw HTML omitted -->
<h3 id="字符串示例">字符串示例：</h3>
<!-- raw HTML omitted -->
<p>如果您的Pony程序中有多出使用相同的单字符字符串时，所有这些字符串都将转换为同一个实例。它们始终相等。</p>
<pre><code class="language-pony" data-lang="pony">let pony = &quot;🐎&quot;
let another_pony = &quot;🐎&quot;
if pony is another_pony then
  // True, therefore this line will run.
end
</code></pre><!-- raw HTML omitted -->
<h2 id="数组array-literals">数组（Array Literals）</h2>
<!-- raw HTML omitted -->
<p>数组的值需要用方括号括起来。数组的元素可以是任何类型的表达式。元素之间用分号<code>;</code>或换行符分隔：</p>
<pre><code class="language-pony" data-lang="pony">let my_literal_array =
  [
    &quot;first&quot;; &quot;second&quot;
    &quot;third one on a new line&quot;
  ]
</code></pre><!-- raw HTML omitted -->
<h3 id="类型接口type-inference">类型接口（Type inference）</h3>
<!-- raw HTML omitted -->
<p>如果没有指定数组的类型，数组表达式的返回类型默认为<code>Array [T] ref</code>，并且，将T（元素的类型）推导为所有元素类型的并集：</p>
<pre><code class="language-pony" data-lang="pony">let my_heterogenous_array =
  [
    U64(42)
    &quot;42&quot;
    U64.min_value()
  ]
</code></pre><!-- raw HTML omitted -->
<p>在上面的示例中，由于数组包含String和U64元素，因此生成的数组类型为<code>Array [(U64 | String)] ref</code>。</p>
<!-- raw HTML omitted -->
<p>如果将分配给数组的元素是其他类型，Pony将会强制转换为数组的定义类型（译者注：不用担心，如果传入的类型无法被转换编译时就会报错）：</p>
<pre><code class="language-pony" data-lang="pony">let my_stringable_array: Array[Stringable] ref =
  [
    U64(0xA)
    &quot;0xA&quot;
  ]
</code></pre><!-- raw HTML omitted -->
<p>这里，<code>my_stringable_array</code>被强制转换为<code>Array [Stringable] ref</code>。之所以能编译通过，是因为String和U64都实现了<code>Stringable</code>特征。</p>
<!-- raw HTML omitted -->
<p>通过在数组上指定类型说明符<code>val</code>，可以与[ref]不同的<a href="/pony-tutorial/reference-capabilities.html">引用权能（Reference Capability）</a>的数组：</p>
<pre><code class="language-pony" data-lang="pony">let my_immutable_array: Array[Stringable] val =
  [
    U64(0xBEEF)
    &quot;0xBEEF&quot;
  ]
</code></pre><!-- raw HTML omitted -->
<p>你可以创建任何<a href="/pony-tutorial/reference-capabilities.html">引用权能（Reference Capability）</a>的数组类型。</p>
<!-- raw HTML omitted -->
<h3 id="as表达式">as表达式</h3>
<!-- raw HTML omitted -->
<p>也有可能使用<code>as</code>表达式来提示数组元素的类型。提示表达式需要在方括号后添加，还要加上冒号：</p>
<pre><code class="language-pony" data-lang="pony">let my_as_array =
  [ as Stringable:
    U64(0xFFEF)
    &quot;0xFFEF&quot;
    U64(1 + 1)
  ]
</code></pre><!-- raw HTML omitted -->
<p>这个as表达式，约束此数组类型为：<code>Array [Stringable] ref</code>。</p>
<!-- raw HTML omitted -->
<p>如果在左侧指定了类型，则需要数组元素与<code>as</code>表达式中的类型完全匹配。</p>
<!-- raw HTML omitted -->
<h3 id="数组和引用">数组和引用</h3>
<!-- raw HTML omitted -->
<p>用字面量构造一个数组会创建对其元素的新引用。因此，为了确保100%的正确性，会将数组元素推导为实际元素类型的别名。如果所有元素的类型均为T，则将数组的北行会被推导为<code>Array [T!] ref</code>，即类型别名为T的数组。</p>
<!-- raw HTML omitted -->
<p>要使用具有多种引用权能的数组（例如val和ref引用权能类型）可以参考下（<a href="/pony-tutorial/types/classes.html#构造函数">构造函数</a>和<a href="/pony-tutorial/reference-capabilities/consume-and-destructive-read.html">所有权转让</a>章节）。</p>
</main>
        </div>
        <div id="search-results" class="center mw7 dn"></div>
      </div>
    </div>
  </article>

    </main>
    

<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/languages/pony.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.5/lunr.min.js"></script>

<script async defer src="https://buttons.github.io/buttons.js"></script>

<script>
  var toggleBtns = document.getElementsByClassName('js-toggle')
  for (var i = 0; i < toggleBtns.length; i++) {
    toggleBtns[i].addEventListener('click', toggleClass, false)
  }

  var myToggleBtns = document.getElementsByClassName('hide-show-toggle')
  for (var i = 0; i < myToggleBtns.length; i++) {
    myToggleBtns[i].addEventListener('click', hideShow, false)
  }

function hideShowDM() {
  var menu = document.getElementById("doc-menu")
  var thebody = document.getElementById("the-body")
  if (window.getComputedStyle(menu).display == "none") {
    menu.style.display = "block";
    thebody.style.left = "300px";
  } else {
    menu.style.display = "none";
    thebody.style.left = "0px";
  }
}

function hideShowCM() {
  var menu = document.getElementById("context-menu")
  if (window.getComputedStyle(menu).display == "none") {
    menu.style.display = "block";
  } else {
    menu.style.display = "none";
  }
}

function toggleClass() {
  
  var content = this.dataset.target.split(' ')
  
  var mobileCurrentlyOpen = document.querySelector('.mobilemenu:not(.dn)')
  var desktopCurrentlyOpen = document.querySelector('.desktopmenu:not(.dn)')
  var desktopActive = document.querySelector('.desktopmenu:not(.dn)')

  
  for (var i = 0; i < content.length; i++) {
    var matches = document.querySelectorAll(content[i]);
    
    [].forEach.call(matches, function(dom) {
        dom.classList.contains('dn') ?
        dom.classList.remove('dn') :
        dom.classList.add('dn');
         return false;
       });
        
      if (mobileCurrentlyOpen) mobileCurrentlyOpen.classList.add('dn')
      if (desktopCurrentlyOpen) desktopCurrentlyOpen.classList.add('dn')
      if (desktopActive) desktopActive.classList.remove('db')

    }
  }

var Pony = {};


Pony.Search = (function() {
  var that = {}
  that.lunrIndex = undefined;
  that.pages = [];

  that.doSearch = function(query) {
    var resultsContainer = $('#search-results');
    var contentContainer = $('#content');
    
    var results = this.lunrIndex.search(query).map(function(result) {
      
        return {
            page: that.pages[result.ref],
            metadata: result.matchData.metadata
        };
    });

    
    resultsContainer.empty();
    resultsContainer.append(
        $("<header>", {class: "mt4 w-100"}).append(
            $("<p>", {class: "f6 b helvetica tracked", text: "SEARCH RESULTS"}))
    );
    var resList = $("<ul>", {id: "search-result-list"});

    
    results.slice(0, 100).forEach(function(result) {
        var res = $("<li>");
        var div = $("<div>", {class: "search-result"});
        div.append($("<a>", {
          href: result.page.uri,
          text: result.page.title,
          class: "search-result-title"
        }));
        var p = $("<p>", {
            class: "search-result-summary"
        });
        var highlighted = that.highlightResult(result.page.summary, result.metadata);
        p.append(highlighted);
        div.append(p);
        res.append(div);
        resList.append(res);
    });
    resultsContainer.append(resList);

    
    contentContainer.addClass("dn");
    resultsContainer.removeClass("dn");
  };

  that.highlightResult = function(text, metadata) {
      var span = $("<span>");
      for (var key in metadata) {
        var summary_metadata = metadata[key]["summary"];
        if (summary_metadata !== undefined && summary_metadata["position"] !== undefined) {
            var position_metadata = summary_metadata["position"];
            var last_pos = 0;
            summary_metadata["position"].forEach(function(elem) {
                span.append(
                    $("<span>", {text: text.slice(last_pos, elem[0])})
                );
                span.append(
                    $("<span>", {
                        class: "highlighted",
                        text: text.slice(elem[0], elem[0] + elem[1])})
                );
                last_pos = elem[0] + elem[1];
            });
            span.append(
                $("<span>", {text: text.slice(last_pos, text.length)})
            );
        } else {
          span.text(text);
        }
      }
      return span;
  };

  that.initLunr = function(onSuccess) {
      $.getJSON("/index.json")
        .done(function(index) {
           
           that.pages = index;
           that.lunrIndex = lunr(function() {
             this.metadataWhitelist = ['position']; 
             this.field("title", { boost: 10 });
             this.field("tags", { boost: 5 });
             this.field("categories", { boost: 5 });
             this.field("content");
             this.field("summary", {boost: 0});
             this.ref("i");

             index.forEach(function (page, idx) {
                 page["i"] = idx;
                 this.add(page)
               },
               this
             );
           });
           onSuccess();
        })
        .fail(function(jqxhr, textStatus, error) {
          var err = textStatus + ", " + error;
          console.error("Error getting search index file:", err);
        });
    }
  that.setUpSearchUI = function() {
    $('#search-box').keyup(function() {
        var query = $(this).val();
        if (query.length < 2) {
            if (query.length == 0) {
                $('#content').removeClass('dn');
                $('#search-results').empty().addClass('dn');
            }
            return;
        }
        if (that.lunrIndex === undefined) {
            that.initLunr(function () {
              that.doSearch(query);
            });
        } else {
            that.doSearch(query);
        }
    });
  }
  return that;
})();




$(document).ready(function() {
  Pony.Search.setUpSearchUI();
});
</script>

  </body>
</html>
